問題解説: 妖精の国 第二のトラブル

こんにちは,ぱろっくです.

妖精の国 第二のトラブルに関する解説を書かせていただきます.

問題文

国から国への船旅の途中、激しい嵐に遭った。荒れ狂う海の中で波に流され、気がつけば小さな島に漂着していた。

エイト「何とか元の航路に戻りたいけど……船の修理が終わるまでこの島で過ごすことになりそうね」

探索していると、島の中央に神殿があることに気づいた。神殿の柱には見知らぬ文字と美しい模様が刻まれていたが、何を表しているのかはわからなかった。そして、祭壇には大きな黒い箱が安置されていた。

エイト「何だろうこの箱……ってサーバじゃない」

詳しく調べてみると、そのサーバは強大な力を持っていることがわかった。そして、その中には先人の訪れた形跡があった。

エイト「どうやらこのサーバの力を試してみようとしたけど、途中で力尽きてしまったようね。この強大な力を使えれば、魔法の研究や応用が爆発的に発展するに違いないわ! よくわからないけど、私たちで動かしてみましょう」

採点基準

  1. CUDAのシンボリックリンクがcuda-8.0ではなくcuda-7.5にはられているのに気づき,修正してmakeが通るようになっている.
  2. GPUのスレッド数をTitanXの上限まで落としてsuccessと出力できている.

解説

この問題では,近年流行しているGPUプログラミングに関するものでした.普段触ったことのない方には新鮮に感じたと思います.これをきっかけにGPUプログラミングに興味を持ってもらえたら嬉しいです.

今回起きていたトラブルは,まずCUDAを新しいバージョンに入れ替えた際にシンボリックリンクが張り替えられていない問題が発生していました.

makeファイル内で記述されていたコンパイル時の-arch及び-codeコンパイラオプションをTitanX(pascal)に合わせていたのですが,古いバージョンの方にシンボリックリンクがはられたままであったためコンパイルが通りませんでした.

そのため,まずシンボリックリンクを張り替えれば,このトラブルは解決し,コンパイルが通るようになります.

次に,実行ファイルの出力がfailedになってしまうトラブルが起きます.

これは,ファイル内でGPUの1ブロックあたりのスレッド上限数である1024を超えてしまい,処理が正常に行われていないため起こるトラブルです.

そのため,ソースコード内のスレッド数の指定を1024以下に変更するなどの対策をすればトラブルが解決しsuccessと出力されるようになります.

まとめ

以上が本問題の解説となります.

この問題は,さくらインターネット株式会社様の「高火力コンピューティング」サービスから機材提供をしていただきました.ご提供していただき本当にありがとうございました.問題提供していた環境を普段も使いたいという方はこちらをご参照ください.